package com.eb.utils;

import java.math.BigDecimal;

/**
 * 计算工具类
 * @author Administrator
 *
 */
public class MathUtil {
	
	//----------------------------------------add--------------------------------------------------//
	/**
	 * 相加 
	 * 2016-7-1
	 * v-haowang
	 */
	public static double add(double a,double b){
		BigDecimal a1 = new BigDecimal(a);
		BigDecimal b1 = new BigDecimal(b);
		BigDecimal c = a1.add(b1);
		return c.doubleValue();
	}
	/**
	 * 相加  保留n位小数(四舍五入)
	 * 2016-7-1
	 * v-haowang
	 */
	public static double add(double a,double b,int n){
		BigDecimal a1 = new BigDecimal(a);
		BigDecimal b1 = new BigDecimal(b);
		BigDecimal c = a1.add(b1).setScale(n, BigDecimal.ROUND_HALF_UP);
		return c.doubleValue();
	}
	/**
	 * 多数相加
	 * 2016-7-1
	 * v-haowang
	 */
	public static double add(double [] ds){
		BigDecimal n = new BigDecimal(0.0);
		for(double d : ds){
			n = n.add(BigDecimal.valueOf(d));
		}
		return n.doubleValue();
	}
	/**
	 * 多数相加 保留n位小数(四舍五入)
	 * 2016-7-1
	 * v-haowang
	 */
	public static double add(double [] ds,int n){
		BigDecimal num = new BigDecimal(0.0);
		for(double d : ds){
			num = num.add(BigDecimal.valueOf(d));
		}
		BigDecimal e = num.setScale(n, BigDecimal.ROUND_HALF_UP);
		return e.doubleValue();
	}
	//----------------------------------------sub--------------------------------------------------//
	/**
	 * 相减
	 * 2016-7-1
	 * v-haowang
	 */
	public static double sub(double a,double b){
		BigDecimal a1 = new BigDecimal(a);
		BigDecimal b1 = new BigDecimal(b);
		BigDecimal c = a1.subtract(b1);
		return c.doubleValue();
	}
	
	/**
	 * 相减 保留n位小数(四舍五入)
	 * 2016-7-1
	 * v-haowang
	 */
	public static double sub(double a,double b,int n){
		BigDecimal a1 = new BigDecimal(a);
		BigDecimal b1 = new BigDecimal(b);
		BigDecimal c = a1.subtract(b1).setScale(n, BigDecimal.ROUND_HALF_UP);
		return c.doubleValue();
	}
	//----------------------------------------mul--------------------------------------------------//
	/**
	 * 相乘
	 * 2016-7-1
	 * v-haowang
	 */
	public static double mul(double a,double b){
		BigDecimal a1 = new BigDecimal(a);
		BigDecimal b1 = new BigDecimal(b);
		BigDecimal c = a1.multiply(b1);
		return c.doubleValue();
	}
	
	/**
	 * 相乘 保留n位小数 (四射五入)
	 * 2016-7-1
	 * v-haowang
	 */
	public static double mul(double a,double b,int n){
		BigDecimal a1 = new BigDecimal(a);
		BigDecimal b1 = new BigDecimal(b);
		BigDecimal c = a1.multiply(b1).setScale(n, BigDecimal.ROUND_HALF_UP);
		return c.doubleValue();
	}
	
	/**
	 * 多数相乘
	 * 2016-7-1
	 * v-haowang
	 */
	public static double mul(double [] ds){
		BigDecimal num = new BigDecimal(0.0);
		for(double d : ds){
			num = num.multiply(BigDecimal.valueOf(d));
		}
		return num.doubleValue();
	}
	
	/**
	 * 多数相乘 保留n位小数 (四射五入)
	 * 2016-7-1
	 * v-haowang
	 */
	public static double mul(double [] ds,int n){
		BigDecimal num = new BigDecimal(0.0);
		for(double d : ds){
			num = num.multiply(BigDecimal.valueOf(d));
		}
		BigDecimal e = num.setScale(n, BigDecimal.ROUND_HALF_UP);
		return e.doubleValue();
	}
	//----------------------------------------div--------------------------------------------------//
	/**
	 * 相除 (默认保留10位小数)
	 * 2016-7-1
	 * v-haowang
	 */
	public static double div(double a,double b){
		BigDecimal a1 = new BigDecimal(a);
		BigDecimal b1 = new BigDecimal(b);
		BigDecimal c = a1.divide(b1,10,BigDecimal.ROUND_HALF_UP);
		return c.doubleValue();
	}
	
	/**
	 * 相除  保留n位小数 四舍五入
	 * 2016-7-1
	 * v-haowang
	 */
	public static double div(double a,double b,int n){
		BigDecimal a1 = new BigDecimal(a);
		BigDecimal b1 = new BigDecimal(b);
		BigDecimal c = a1.divide(b1,n,BigDecimal.ROUND_HALF_UP);
		return c.doubleValue();
	}
	
	//----------------------------------------向上取整--------------------------------------------------//
	
	/**
	 * 向上取整 保留n位小数
	 * n=2
	 * 1.234--->1.24
	 * 1.235--->1.24
	 */
	public static double up(double num,int n){
		return new BigDecimal(num).setScale(n, BigDecimal.ROUND_UP).doubleValue();
	}
	
	/**
	 * 向下取整 保留n位小数
	 * n=2
	 * 1.234--->1.23
	 * 1.235--->1.23
	 */
	public static double down(double num,int n){
		return new BigDecimal(num).setScale(n, BigDecimal.ROUND_DOWN).doubleValue();
	}
	
	
	
	public static void main(String[] args) {
	}
}
